#ifndef SUBJECT_H
#define SUBJECT_H
#include <vector>
#include <set>
class Observer;

typedef enum {
	EVENT_ALL = -1,
	EVENT_ESF = 0,
	EVENT_FOH = 1,
	EVENT_NUM = 2,
}EVENT;

class Subject{
public:
	virtual ~Subject();
	virtual void Attach(Observer* observer, EVENT e);
	virtual void Detach(Observer* observer, EVENT e = EVENT_ALL);
	virtual void Notify(EVENT e = EVENT_ALL);
protected:
	Subject();
private:
	std::vector<std::set<Observer*>> observers;
};
#endif